package com.pig4cloud.pigx.strategy.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * StrategyOrderContractEnum
 *
 * @since 2022/8/15 16:19
 */
public enum StrategyOrderContractEnum {
    ;

    /**
     * 委托状态（0委托中、1部分成交、2部分已撤销、3完全成交、4已撤销、5已过期、6异常）
     */
    @Getter
    @AllArgsConstructor
    public enum Status {
        /**
         * 0 委托中
         */
        RUNNING("委托中", "0"),
        /**
         * 1 部分成交
         */
        DEAL_PART("委托中", "1"),
        /**
         * 2 部分已撤销
         */
        CANCEL_PART("部分已撤销", "2"),
        /**
         * 3 完全成交
         */
        DEAL("完全成交", "3"),
        /**
         * 4 已撤销
         */
        CANCEL("已撤销", "4"),
        /**
         * 5 已过期
         */
        EXPIRE("已过期", "5"),
        /**
         * 6 异常
         */
        ERROR("异常", "6");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (Status item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (Status item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }

    /**
     * 类型（0市价单、1限价单）
     */
    @Getter
    @AllArgsConstructor
    public enum Type {
        /**
         * 0 市价单
         */
        MARKET("市价单", "0"),
        /**
         * 1 限价单
         */
        LIMIT("限价单", "1");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (Type item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (Type item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }

    /**
     * 仓位模式（0逐仓、1全仓）
     */
    @Getter
    @AllArgsConstructor
    public enum PositionMode {
        /**
         * 0 逐仓
         */
        ISOLATED("逐仓", "0"),
        /**
         * 1 全仓
         */
        CROSS("全仓", "1");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (PositionMode item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (PositionMode item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }

    /**
     * 方向（0做多、1做空）
     */
    @Getter
    @AllArgsConstructor
    public enum Side {
        /**
         * 0 做多
         */
        LONG("做多", "0"),
        /**
         * 1 做空
         */
        SHORT("做空", "1");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (Side item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (Side item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }

    /**
     * 操作类型（0开仓、1平仓）
     */
    @Getter
    @AllArgsConstructor
    public enum OperationType {
        /**
         * 0 开仓
         */
        OPEN("开仓", "0"),
        /**
         * 1 平仓
         */
        CLOSE("平仓", "1");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (OperationType item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (OperationType item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }

    /**
     * 业务类型（0开仓、1补仓、2平仓、3锁仓、4正向止盈平仓、5正向止盈回滚、6手动开仓、7手动平仓、8止盈、9止损、10手动部分平仓）
     */
    @Getter
    @AllArgsConstructor
    public enum BusinessType {

        /**
         * 0 开仓
         */
        OPEN("开仓", "0"),

        /**
         * 1 补仓
         */
        ADD("补仓", "1"),

        /**
         * 2 平仓
         */
        CLOSE("平仓", "2"),

        /**
         * 3 锁仓
         */
        LOCK("锁仓", "3"),

        /**
         * 4 正向止盈平仓
         */
        FORWARD_STOP_CLOSE("正向止盈平仓", "4"),

        /**
         * 5 正向止盈回滚
         */
        FORWARD_STOP_ROLLBACK("正向止盈回滚", "5"),

        /**
         * 6 手动开仓
         */
        MANUAL_OPEN("手动开仓", "6"),

        /**
         * 7 手动平仓
         */
        MANUAL_CLOSE("手动平仓", "7"),

        /**
         * 8 止盈
         */
        STOP_PROFIT("止盈", "8"),

        /**
         * 9 止损
         */
        STOP_LOST("止损", "9"),

        /**
         * 10 手动部分平仓
         */
        MANUAL_CLOSE_PART("手动部分平仓", "10");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (BusinessType item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (BusinessType item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }

        /**
         * 根据value寻找对应的枚举
         *
         * @param value 枚举值
         * @return {@link BusinessType}
         * @since 2022/12/5 18:07
         */
        public static BusinessType findByValue(String value) {
            for (BusinessType item : values()) {
                if (item.getValue().equals(value)) {
                    return item;
                }
            }

            return null;
        }
    }


}
